class Solution(object):
    def findAnagrams(self, s, p):
        """
        :type s: str
        :type p: str
        :rtype: List[int]
        """
        # 初始化结果列表res，并处理边界情况（p比s长）。
        res = []
        len_p, len_s = len(p), len(s)
        if len_p > len_s:
            return res

        # 初始化字母计数数组（26个字母） 创建两个计数数组p_count和s_count，分别记录p和当前窗口的字符频率
        p_count = [0] * 26
        s_count = [0] * 26

        # 填充p的计数和s的初始窗口计数
        for i in range(len_p):
            p_count[ord(p[i]) - ord('a')] += 1
            s_count[ord(s[i]) - ord('a')] += 1

        # 初始窗口比较
        if p_count == s_count:
            res.append(0)

        # 滑动窗口：窗口右移，更新计数并比较
        for i in range(len_p, len_s):
            # 移除窗口左端字符
            left_char = s[i - len_p]
            s_count[ord(left_char) - ord('a')] -= 1
            # 添加新右端字符
            right_char = s[i]
            s_count[ord(right_char) - ord('a')] += 1
            # 比较计数数组
            if s_count == p_count:
                res.append(i - len_p + 1)

        return res


# 测试示例
s = "cbaebabacd"
p = "abc"
print(Solution().findAnagrams(s, p))  # 输出 [1,3,6,7]
